home *** CD-ROM | disk | FTP | other *** search
/ Assassins - Ultimate CD Games Collection 2 / Assassins 2 - Ultimate Games No. 2 (1995)(Weird Science)[!][Amiga-CD32-CDTV].iso / arcade / boing_3 / boingvs3.amos / boingvs3.amosSourceCode
AMOS Source Code  |  1989-03-31  |  16KB  |  716 lines

  1. '
  2. '             BOING!!!!!! Vs 3.0 
  3. '
  4. '             WRITTEN BY SHAUN WATTERS 
  5. '
  6. '             STARTED : 4/1/95 
  7.  
  8. Dim MAP(19,47),SCOREFRAME(4),TIMEFRAME(2),LAZERY(5),LAZERX(5),LEVEL$(10),S(3)
  9.  
  10. Global MAP(),FILENAME$,LEVEL$,BX,BY,FRAME,SY,SCOREFRAME(),TIMEFRAME()
  11. Global BOUNCE,MX_HEIGHT,HEIGHT,UP,YSPEED,JCOUNT,SCORE,LAZERY(),LAZERX()
  12. Global LAZER,APPLES,XIT,XX,XY,EOL,LEVEL,LEVEL$(),TIME,DEAD
  13. Global LIVES,S(),BLOCKCOUNT,BLOCKX,BLOCKY,B,BAX,BAY,FRAMECOUNT,FCOUNT
  14. Global GTOS,SLEEP,SCOUNT,XITFRAME,TENFRAME,TX,TY,TENCOUNT,NEWLIFE
  15.  
  16.  
  17. MAINLOOP
  18.  
  19.  
  20. Procedure SETUP
  21.    '
  22.    '  SCREEN SETUP
  23.    '
  24.    Screen Open 0,320,256,8,Lowres
  25.    DISKPRESENT
  26.    Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  27.    Hide 
  28.    LIVES=3
  29.    If Length(7)=0 : Load "boing:samples.abk",7 : End If 
  30.   ' Track Load "df0:mod.late night shopping",8 
  31.   ' Track Loop On  
  32.   ' Track Play 8 
  33.   ' Track Loop On  
  34.    Sam Bank 7
  35.    LEVEL$="df0:map1.map"
  36.    If Length(1)=0 : Load "df0:boingsprites.abk" : End If 
  37.    Screen Open 2,320,512,8,Lowres : Rem FOREGROUND 
  38.    Flash Off 
  39.    Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  40.  
  41.    If Length(6)=0
  42.       Load Iff "df0:waterfall.iff",0
  43.       Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  44.       Spack 0 To 6
  45.    Else 
  46.       Unpack 6 To 0
  47.       Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  48.    End If 
  49.    
  50.    Screen Open 1,320,512,8,Lowres
  51.    Flash Off : Curs Off : Cls 0
  52.    Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  53.    Screen Copy 0,0,0,320,256 To 1,0,0
  54.    Screen Copy 0,0,0,320,256 To 1,0,256
  55.    Screen 0 : Cls 0
  56.    If Length(10)=0
  57.       Load Iff "df0:boingtitle.iff",0
  58.       Spack 0 To 10
  59.       Screen Close 0
  60.    End If 
  61.    Unpack 10 To 0
  62.    Screen Copy 0,0,0,320,256 To 2,0,0
  63.    Load Iff "df0:boingtitle2.iff",0
  64.    Screen Copy 0,0,0,320,256 To 2,0,256
  65.    Screen Close 0
  66.  
  67.    Wait Vbl : Dual Playfield 2,1 : Wait Vbl 
  68.  
  69.    Set Rainbow 0,15,32,"","",""
  70.  
  71.    For C=0 To 14
  72.       Read CLR
  73.       Rain(0,C*2)=CLR
  74.       Rain(0,(C*2)+1)=CLR
  75.    Next C
  76.  
  77.    For LC=1 To 19
  78.       For LC1=1 To 47
  79.          MAP(LC,LC1)=0
  80.       Next LC1
  81.    Next LC
  82.  
  83.    Screen Display 2,128,40,320,256 : View 
  84.  
  85.    Screen 2 : Fade 2,$0,$F00,$D00,$B00,$900,$700,$500,$FFF,$0,$0,$0,$0,$0,$0,$0,$0,$A00,$600,$F00,$F5F,$FE0,$80,$0,$6,$8,$A
  86.    For Y=30 To 0 Step -1
  87.       Rainbow 0,0,154+Y,30-Y
  88.       Wait Vbl : View 
  89.    Next Y
  90.  
  91.    Screen 2 : Limit Mouse : Screen To Front 2
  92.  
  93.    For LC=1 To 4 : SCOREFRAME(LC)=0 : Next LC
  94.    For LC=1 To 2 : TIMEFRAME(LC)=9 : Next LC
  95.  
  96.    Data $F00,$E00,$D00,$C00,$B00,$A00,$900,$800,$802,$804,$806,$808,$80A,$80C,$80E
  97.  
  98. End Proc
  99.  
  100. Procedure LMAP
  101.    DISKPRESENT
  102.    Open In 1,FILENAME$
  103.    For LC=0 To 19
  104.       For LC2=0 To 47
  105.          Input #1,MAP(LC,LC2)
  106.       Next LC2
  107.    Next LC
  108.    Close 1
  109.    DMAP
  110. End Proc
  111.  
  112. Procedure BLOCKSETUP
  113.   Screen Hide 0
  114.   If Length(5)=0 : Load Iff "df0:blocks2.iff",0 : Spack 0 To 5
  115.   Else Unpack 5 To 0 : End If 
  116.    Screen Hide 0
  117.   N=1
  118.   For Y=0 To 15
  119.       For X=0 To 19
  120.          Get Block N,X*16,Y*16,16,16 : Inc N
  121.       Next X
  122.   Next Y
  123.   Screen Close 0
  124. End Proc
  125.  
  126. Procedure DMAP
  127.    Screen 2
  128.    Cls 0
  129.    Screen Hide 2
  130.    X=0
  131.    Y=0
  132.    APPLES=0
  133.    COUNT=1
  134.    For LC=0 To 19
  135.       For LC2=0 To 47
  136.          If MAP(LC,LC2)=2 : Inc APPLES : End If 
  137.          If MAP(LC,LC2)>0
  138.  
  139.              If MAP(LC,LC2)=181 or MAP(LC,LC2)=161
  140.  
  141.                   If MAP(LC,LC2)=161 : XX=LC : XY=LC2 : Put Block 1,X,Y
  142.                   Else Put Block 1,X,Y : End If 
  143.  
  144.              Else Put Block MAP(LC,LC2),X,Y : End If 
  145.          End If 
  146.  
  147.          If MAP(LC,LC2)=107 or MAP(LC,LC2)=108
  148.             LAZERY(COUNT)=LC2
  149.             LAZERX(COUNT)=LC
  150.             Inc COUNT
  151.             Inc LAZER
  152.          End If 
  153.          Y=Y+16
  154.       Next LC2
  155.       Y=0
  156.       X=X+16
  157.    Next LC
  158. End Proc
  159.  
  160. Procedure COPPERSETUP
  161.  
  162.   Set Rainbow 0,15,32,"","",""
  163.  
  164.   For C=0 To 14
  165.       Read CLR
  166.       Rain(0,C*2)=CLR
  167.       Rain(0,(C*2)+1)=CLR
  168.   Next C
  169.  
  170.   For Y=30 To 0 Step -1
  171.       Rainbow 0,0,154+Y,30-Y
  172.       Wait Vbl : View 
  173.   Next Y
  174.  
  175.   Data $FA0,$E80,$D40,$C20,$B00,$A00,$900,$800,$802,$804,$806,$828,$84A,$88C,$8AE
  176. End Proc
  177.  
  178. Procedure SETUPVARS
  179.    XITFRAME=61
  180.    GTOS=0
  181.    SLEEP=0
  182.    SCOUNT=0
  183.    BLOCKCOUNT=0
  184.    FCOUNT=0
  185.    FRAMECOUNT=0
  186.    BX=288
  187.    BY=632
  188.    FRAME=2
  189.    SY=512
  190.    BOUNCE=-6
  191.    HEIGHT=0
  192.    UP=0
  193.    YSPEED=0
  194.    LAZER=0
  195.    LEVEL=1
  196.    TIME=75
  197.    DEAD=0
  198.    S(1)=240
  199.    S(2)=245
  200.    S(3)=250
  201.    LEVEL$(1)="df0:1.map"
  202.    LEVEL$(2)="df0:2.map"
  203.    LEVEL$(3)="df0:3.map"
  204.    LEVEL$(4)="df0:4.map"
  205.    LEVEL$(5)="df0:5.map"
  206.    LEVEL$(6)="df0:6.map"
  207. End Proc
  208.  
  209. Procedure LEVELINIT
  210.    Screen Offset 2,0,SY
  211.    Screen Offset 1,0,SY/2
  212. End Proc
  213.  
  214. Procedure DISPLAYSPRITES
  215.  
  216.    Sprite 6,BX+128,BY+44-SY,FRAME
  217.  
  218.    Sprite 10,132,50,SCOREFRAME(1)+5
  219.    Sprite 11,132,62,SCOREFRAME(2)+5
  220.    Sprite 12,132,74,SCOREFRAME(3)+5
  221.    Sprite 13,132,86,SCOREFRAME(4)+5
  222.  
  223.    Sprite 17,132,226,16
  224.    Sprite 14,132,238,TIMEFRAME(1)+5
  225.    Sprite 15,132,250,TIMEFRAME(2)+5
  226.  
  227.    Sprite 18,132,276,15
  228.    Sprite 19,132,288,LIVES+5
  229.  
  230.    If TENFRAME>0 : Bob 2,TX,TY,TENFRAME : End If 
  231.  
  232. End Proc
  233.  
  234. Procedure BEGINING
  235.    Screen Show 2
  236. Do 
  237.    For LC=0 To 245
  238.       If Fire(1) : Pop Proc : End If 
  239.       Wait Vbl 
  240.    Next LC
  241.  
  242.    For LC=0 To 245
  243.       Screen Offset 2,0,Y/2
  244.       Screen Offset 1,0,256-(Y/2)
  245.       Y=Y+2
  246.       If Fire(1) : Pop Proc : End If 
  247.       Wait Vbl 
  248.    Next LC
  249.  
  250.    For LC=0 To 245
  251.       If Fire(1) : Pop Proc : End If 
  252.       Wait Vbl 
  253.    Next LC
  254.  
  255.    For LC=0 To 245
  256.       Screen Offset 2,0,Y/2
  257.       Screen Offset 1,0,256-(Y/2)
  258.       Y=Y-2
  259.       If Fire(1) : Pop Proc : End If 
  260.       Wait Vbl 
  261.    Next LC
  262.  
  263. Loop 
  264. End Proc
  265.  
  266. Procedure DISKPRESENT
  267.    F$="boing:"
  268.    If Exist(F$) : Pop Proc : End If 
  269.    Screen Open 0,320,200,8,Lowres
  270.    Unpack 5 To 0
  271.    Cls 0
  272.    Put Block 281,155,95
  273.    Put Block 282,171,95
  274.    Put Block 301,155,111
  275.    Put Block 302,171,111
  276.    Repeat 
  277.       Palette $0,$A0,$FF0,$F00,$A00,$A9F,$45C,$4A
  278.       Wait 10
  279.       Palette $0,$0,$0,$0,$0,$0,$0,$0
  280.       Wait 10
  281.    Until Exist(F$)
  282.    Screen Close 0
  283. End Proc
  284.  
  285. Procedure SF1
  286.    DISKPRESENT
  287.    Erase 8
  288.    Rainbow Del 
  289.    XIT=0
  290.    EOL=0
  291.    Fade 2 : Wait 30
  292.    Screen 2
  293.    Screen Hide 2
  294.    Screen Close 1
  295.    Screen Close 2
  296.    Screen Open 2,320,768,8,Lowres
  297.    Curs Off : Flash Off : Cls 0
  298.    Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  299.    Screen Open 1,320,512,8,Lowres
  300.    Screen 1 : Cls 0
  301.    Wait Vbl : Dual Playfield 2,1 : Wait Vbl 
  302.    Screen 2
  303.    Screen Hide 2
  304.    Load Iff "df0:back3.iff",0 : Screen 0
  305.    Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  306.    Screen Copy 0,0,0,320,256 To 1,0,1
  307.    Screen Copy 0,0,0,320,256 To 1,0,256
  308.    Screen Close 0
  309.    Screen 2 : Cls 0
  310.    Screen Display 2,128,45,320,256
  311.    FILENAME$=LEVEL$(LEVEL)
  312.    LMAP
  313.    COPPERSETUP
  314.    Palette $0,$B0,$FF0,$F00,$A00,$A9F,$45B,$4A,$0,$222,$333,$444,$555,$666,$777,$FF0,$0,$FFF,$EBB,$888,$444,$0,$E00,$303,$105,$3F3,$8F8,$6F,$4D,$2A,$18,$6
  315.    Screen Show 2
  316.    GREADY
  317. End Proc
  318.  
  319. Procedure MAIN
  320. '
  321. '    !!!!!!GOING UP!!!!!!! 
  322. '
  323.    Dec TIME
  324.    If TIME=0 : CALCTIME : TIME=75 : End If 
  325.  
  326.    If UP=1
  327.  
  328.    If MAP(BX/16,(BY-8)/16)>106 and MAP(BX/16,(BY-8)/16)<121 : LOSELIFE : End If 
  329.  
  330.       If YSPEED<0
  331.          If SLEEP=0 : FRAME=34+FRAMECOUNT : End If 
  332.          If MAP(BX/16,(BY-2)/16)<61 and MAP((BX+15)/16,(BY-2)/16)<61
  333.             BY=BY+YSPEED
  334.             Inc JCOUNT : If JCOUNT=3 : JCOUNT=0 : Inc YSPEED : End If 
  335.          Else 
  336.             YSPEED=-YSPEED
  337.             Inc BOUNCE
  338.             UP=0
  339.          End If 
  340.       End If 
  341.  
  342.       If YSPEED=0
  343.          If MAP(BX/16,(BY+16)/16)<61 or MAP((BX+15)/16,(BY+16)/16)<61
  344.             Inc BOUNCE : UP=0
  345.          End If 
  346.       End If 
  347.  
  348. '
  349. '   !!!!!GOING DOWN!!!!! 
  350. '
  351.    Else 
  352.  
  353.       Do 
  354.          If MAP(BX/16,(BY+16)/16)>60 or MAP((BX+15)/16,(BY+16)/16)>60
  355.             If BOUNCE<0 : YSPEED=BOUNCE : Else YSPEED=-2 : End If 
  356.             UP=1 : Exit 
  357.          End If 
  358.  
  359.          If SLEEP=0 : FRAME=30+FRAMECOUNT : End If 
  360.          If BOUNCE=0 and Fire(1) : YSPEED=2 : BOUNCE=-3 : End If 
  361.          BY=BY+YSPEED
  362.          Inc JCOUNT : If JCOUNT=3 : JCOUNT=0 : If YSPEED<8 : Inc YSPEED : End If : End If 
  363.          Exit 
  364.       Loop 
  365.  
  366.       If(MAP((BX)/16,(BY+16)/16)=182 and MAP((BX+15)/16,(BY+16)/16)=182) and YSPEED=0 : Sam Play 4,3 : YSPEED=-8 : B=1 : BOUNCE=YSPEED : End If 
  367.       If(MAP((BX)/16,(BY+16)/16)=181 or MAP((BX+15)/16,(BY+16)/16)=181) and YSPEED=0 : Sam Play 4,3 : YSPEED=-8 : BOUNCE=YSPEED : End If 
  368.    End If 
  369.  
  370.  
  371.    If Jleft(1)
  372.       GTOS=0
  373.       SLEEP=0
  374.       If MAP((BX-2)/16,BY/16)>106 and MAP((BX-2)/16,BY/16)<121 : LOSELIFE : End If 
  375.       If XIT=1 and MAP((BX-2)/16,BY/16)=161 : EOL=1 : End If 
  376.       If MAP((BX-2)/16,BY/16)=2 : PICKUPSLEFT : End If 
  377.       If SLEEP=0 : FRAME=38+FRAMECOUNT : End If 
  378.       If MAP((BX-2)/16,BY/16)<61 : BX=BX-2 : End If 
  379.    End If 
  380.  
  381.    If Jright(1)
  382.       GTOS=0
  383.       SLEEP=0
  384.       If XIT=1 and MAP((BX+17)/16,BY/16)=161 : EOL=1 : End If 
  385.       If MAP((BX+17)/16,BY/16)>106 and MAP((BX+17)/16,BY/16)<121 : LOSELIFE : End If 
  386.       If MAP((BX+17)/16,BY/16)=2 : PICKUPSRIGHT : End If 
  387.       If SLEEP=0 : FRAME=42+FRAMECOUNT : End If 
  388.       If MAP((BX+17)/16,BY/16)<61 : BX=BX+2 : End If 
  389.    End If 
  390.  
  391.    If MAP(BX/16,(BY+16)/16)=141
  392.       BLOCKCOUNT=5
  393.       BLOCKX=BX/16 : BLOCKX=BLOCKX*16 : Rem DISAPEARING BLOCKS 
  394.       BLOCKY=(BY+16)/16 : BLOCKY=BLOCKY*16
  395.    End If 
  396.  
  397.     If MAP((BX+8)/16,(BY+16)/16)>106 and MAP((BX+8)/16,(BY+16)/16)<115 : LOSELIFE : End If 
  398.  
  399.     If MAP((BX+8)/16,(BY-2)/16)>106 and MAP((BX+8)/16,(BY-2)/16)<115 : LOSELIFE : End If 
  400.  
  401.  
  402.    If BLOCKCOUNT>1 : Dec BLOCKCOUNT : End If 
  403.  
  404.    If BLOCKCOUNT=1
  405.             Sam Play 4,4
  406.             Put Block 21,BLOCKX,BLOCKY
  407.             MAP(BLOCKX/16,BLOCKY/16)=21
  408.             BLOCKCOUNT=0
  409.    End If 
  410.  
  411.    If Key State(69) : DEAD=1 : End If 
  412.    If SCORE=1000 and NEWLIFE=0 : Inc LIVES : NEWLIFE=1 : End If 
  413.  
  414.    If MAP(BX/16,(BY+16)/16)=182 and MAP((BX+15)/16,(BY+16)/16)=182 : Sam Play 4,3 : B=1 : If BOUNCE>-12 : Dec BOUNCE : End If : End If : Rem lands on trampoline
  415.    If MAP(BX/16,(BY+16)/16)=181 or MAP((BX+15)/16,(BY+16)/16)=181 : Sam Play 4,3 : If BOUNCE>-12 : Dec BOUNCE : End If : End If : Rem lands on trampoline
  416.  
  417.    If MAP(BX/16,(BY+16)/16)=2 : PICKUPSDOWN : End If 
  418.  
  419.    If MAP(BX/16,(BY-2)/16)=2 : PICKUPUP : End If 
  420.  
  421.    If MAP((BX+8)/16,(BY+16)/16)>182 and MAP((BX+8)/16,(BY+16)/16)<186 : OPENDOOR : End If 
  422.  
  423.    If MAP(BX/16,(BY+16)/16)>106 and MAP(BX/16,(BY+16)/16)<115 : LOSELIFE : End If 
  424.  
  425.     SPRING
  426.  
  427.    If XIT=0 and APPLES=0
  428.        XIT=1
  429.    End If 
  430.  
  431.    If XIT=1 : Bob 1,XX*16,XY*16,XITFRAME : End If 
  432.  
  433.    Inc XITFRAME : If XITFRAME=67 : XITFRAME=61 : End If 
  434.  
  435.    If XIT=1 and MAP(BX/16,(BY+8)/16)=161 : LEAVE : EOL=1 : End If 
  436.  
  437.    SY=BY-120
  438.    If SY<0 : SY=0 : End If 
  439.    If SY>512 : SY=512 : End If 
  440.    If DEAD=1 : Sam Play 4,1 : End If 
  441.    Inc FCOUNT
  442.    If FCOUNT=4 : Inc FRAMECOUNT : FCOUNT=0 : End If 
  443.    If FRAMECOUNT=4 : FRAMECOUNT=0 : End If 
  444.    If SLEEP=0 : Inc GTOS : End If 
  445.    If GTOS=240 : SLEEP=1 : GTOS=0 : FRAME=51 : End If 
  446.    If SLEEP=1 : Inc SCOUNT : End If 
  447.    If SCOUNT=5 : Inc FRAME : SCOUNT=0 : End If 
  448.    If FRAME=61 : FRAME=57 : End If 
  449.    If TENFRAME>0 : Inc TENCOUNT : End If 
  450.    If TENCOUNT=2 : Inc TENFRAME : TENCOUNT=0 : End If 
  451.    If TENFRAME=71 : TENFRAME=0 : Bob Off : End If 
  452. End Proc
  453.  
  454. Procedure GREADY
  455.  
  456.    Screen Offset 2,0,SY
  457.    Screen Offset 1,0,SY/2
  458.    X1=448 : X2=488
  459.  
  460.    Repeat 
  461.       Sprite 8,X1,160,17 : If X1>288 : Add X1,-4 : End If 
  462.       Sprite 9,X2,180,18 : Add X2,-4
  463.       Wait Vbl 
  464.    Until X2<288
  465.  
  466.    Sprite 10,295,200,LEVEL+5
  467.  
  468.    For LC=1 To 50 : Wait Vbl : Next LC
  469.  
  470.    Sprite Off 10
  471.  
  472.    Repeat 
  473.       Sprite 8,X1,160,17 : Add X1,-8
  474.       Wait Vbl 
  475.    Until X1<248
  476.    Repeat 
  477.       Sprite 8,X1,160,17 : Add X1,-8
  478.       Sprite 9,X2,180,18 : Add X2,-8
  479.       Wait Vbl 
  480.    Until X2<128
  481.  
  482. Sprite Off 
  483. End Proc
  484.  
  485. Procedure LOSELIFE
  486.    Sam Play 4,2
  487.    For LC=19 To 29
  488.       Sprite 6,BX+128,BY+44-SY,LC
  489.       If LC<23 : Wait 2 : End If 
  490.       Wait 3
  491.       Wait Vbl 
  492.    Next LC
  493.    BX=288
  494.    BY=600
  495.    FRAME=2
  496.    SY=512
  497.    BOUNCE=-6
  498.    HEIGHT=0
  499.    UP=0
  500.    YSPEED=0
  501.    Dec LIVES
  502.    If LIVES=0 : DEAD=1 : End If 
  503. End Proc
  504.  
  505. Procedure LEAVE
  506.    L=0
  507.    For LC=46 To 50
  508.       Sprite 6,BX+128,BY+44-SY,LC
  509.       Wait 8
  510.       If LC=50 and L=0 : LC=46 : L=1 : End If 
  511.    Next LC
  512. End Proc
  513.  
  514. Procedure PICKUPSDOWN
  515.    Sam Play 4,6
  516.    Y=(BY+16)/16
  517.    Y=Y*16
  518.    X=BX/16
  519.    X=X*16
  520.    SCORE=SCORE+10
  521.    Put Block 1,X,Y
  522.    MAP(BX/16,(BY+16)/16)=1
  523.    Dec APPLES
  524.    CALCSCORE
  525.    TEN
  526. End Proc
  527.  
  528. Procedure SPRING
  529.    If B=0 : Pop Proc : End If 
  530.    If B=1
  531.       BAY=(BY+16)/16
  532.       BAY=BAY*16
  533.       BAX=BX/16
  534.       BAX=BAX*16
  535.    End If 
  536.  
  537.   If B<6
  538.       Put Block B+200,BAX,BAY
  539.       Inc B
  540.   Else B=0 : End If 
  541. End Proc
  542.  
  543. Procedure PICKUPUP
  544.    Sam Play 4,6
  545.    Y=(BY-2)/16
  546.    Y=Y*16
  547.    X=BX/16
  548.    X=X*16
  549.    SCORE=SCORE+10
  550.    Put Block 1,X,Y
  551.    MAP(BX/16,(BY-2)/16)=1
  552.    Dec APPLES
  553.    CALCSCORE
  554.    TEN
  555. End Proc
  556.  
  557. Procedure PICKUPSLEFT
  558.    Sam Play 4,6
  559.    X=(BX-2)/16
  560.    X=X*16
  561.    Y=BY/16
  562.    Y=Y*16
  563.    SCORE=SCORE+10
  564.    Put Block 1,X,Y
  565.    MAP((BX-2)/16,BY/16)=1
  566.    Dec APPLES
  567.    CALCSCORE
  568.    TEN
  569. End Proc
  570.  
  571. Procedure PICKUPSRIGHT
  572.    Sam Play 4,6
  573.    X=(BX+17)/16
  574.    X=X*16
  575.    Y=BY/16
  576.    Y=Y*16
  577.    SCORE=SCORE+10
  578.    Put Block 1,X,Y
  579.    MAP((BX+17)/16,BY/16)=1
  580.    Dec APPLES
  581.    CALCSCORE
  582.    TEN
  583. End Proc
  584.  
  585. Procedure OPENDOOR
  586.       Sam Play 4,5
  587.       On(MAP(BX/16,(BY+16)/16))-182 Gosub A,B,C,D
  588.    Pop Proc
  589.  
  590.    A:
  591.       X=BX/16
  592.       X=X*16
  593.       Y=(BY+16)/16
  594.       Y=Y*16
  595.       Put Block MAP(BX/16,(BY+16)/16)-142,X,Y
  596.       Put Block 21,LAZERX(1)*16,LAZERY(1)*16
  597.       MAP(LAZERX(1),LAZERY(1))=1
  598.       MAP(LAZERX(1),LAZERY(1)+1)=1
  599.       MAP(LAZERX(1),LAZERY(1)-1)=1
  600.    Return 
  601.  
  602.   B:
  603.       X=BX/16
  604.       X=X*16
  605.       Y=(BY+16)/16
  606.       Y=Y*16
  607.       Put Block MAP(BX/16,(BY+16)/16)-142,X,Y
  608.       Put Block 1,LAZERX(2)*16,LAZERY(2)*16
  609.       MAP(LAZERX(2),LAZERY(2))=1
  610.       MAP(LAZERX(2),LAZERY(2)+1)=1
  611.       MAP(LAZERX(2),LAZERY(2)-1)=1
  612.    Return 
  613.  
  614.   C:
  615.       X=BX/16
  616.       X=X*16
  617.       Y=(BY+16)/16
  618.       Y=Y*16
  619.       Put Block MAP(BX/16,(BY+16)/16)-142,X,Y
  620.       Put Block 1,LAZERX(3)*16,LAZERY(3)*16
  621.       MAP(LAZERX(3),LAZERY(3))=1
  622.       MAP(LAZERX(3),LAZERY(3)+1)=1
  623.       MAP(LAZERX(3),LAZERY(3)-1)=1
  624.    Return 
  625.  
  626.   D:
  627.       X=BX/16
  628.       X=X*16
  629.       Y=(BY+16)/16
  630.       Y=Y*16
  631.       Put Block MAP(BX/16,(BY+16)/16)-142,X,Y
  632.       Put Block 1,LAZERX(4)*16,LAZERY(4)*16
  633.       MAP(LAZERX(4),LAZERY(4))=1
  634.       MAP(LAZERX(4),LAZERY(4)+1)=1
  635.       MAP(LAZERX(4),LAZERY(4)-1)=1
  636.    Return 
  637. End Proc
  638.  
  639. Procedure CALCTIME
  640.    If TIMEFRAME(2)>-1 : Dec TIMEFRAME(2) : End If 
  641.    If TIMEFRAME(2)=-1 : TIMEFRAME(2)=9 : Dec TIMEFRAME(1) : End If 
  642.    If TIMEFRAME(2)=0 and TIMEFRAME(1)=0 : DEAD=1 : End If 
  643. End Proc
  644.  
  645. Procedure CALCSCORE
  646. NEWLIFE=0
  647. If SCOREFRAME(2)=9 and SCOREFRAME(3)=9 : Inc SCOREFRAME(1) : SCOREFRAME(2)=0 : SCOREFRAME(3)=0 : End If 
  648. If SCOREFRAME(3)<10 : Inc SCOREFRAME(3) : End If 
  649. If SCOREFRAME(3)=10 and SCOREFRAME(2)<9 : Inc SCOREFRAME(2) : SCOREFRAME(3)=0 : End If 
  650. If SCOREFRAME(1)=9 and SCOREFRAME(2)=9 and SCOREFRAME(3)=9
  651.                               For LC=1 To 4
  652.                                  SCOREFRAME(LC)=0
  653.                               Next LC
  654. End If 
  655. End Proc
  656.  
  657. Procedure SCRSCN
  658.    Screen Offset 2,0,SY
  659.    Screen Offset 1,0,SY/2
  660. End Proc
  661.  
  662. Procedure NXTLEVEL
  663.    Sprite Off 
  664.    Rainbow Del 
  665.    Screen 1 : Fade 2 : Wait 30
  666.    Screen 2 : Fade 2 : Wait 30
  667.    Screen Hide 2
  668.    BX=288
  669.    BY=600
  670.    FRAME=2
  671.    SY=512
  672.    BOUNCE=-6
  673.    HEIGHT=0
  674.    UP=0
  675.    YSPEED=0
  676.    TIMEFRAME(1)=9
  677.    TIMEFRAME(2)=9
  678.    Inc LEVEL
  679.    If LEVEL=7 : LEVEL=0 : End If 
  680.    SF1
  681.    LEVELINIT
  682. End Proc
  683.  
  684. Procedure MAINLOOP
  685. BLOCKSETUP
  686. Do 
  687.    SETUP
  688.    SETUPVARS
  689.    BEGINING
  690.    Track Stop 
  691.    Erase 8
  692.    SF1
  693.    DISPLAYSPRITES
  694.    LEVELINIT
  695.    Repeat 
  696.       MAIN
  697.       DISPLAYSPRITES
  698.       SCRSCN
  699.       Wait Vbl 
  700.       If EOL : LEAVE : NXTLEVEL : End If 
  701.    Until DEAD=1
  702.    Erase 6 : Erase 10
  703.    Fade 2 : Wait 30
  704.    Rainbow Del 
  705.    Screen Open 0,320,256,8,Lowres
  706.    Flash Off : Curs Off : Cls 0
  707.    Sprite Off 
  708. Loop 
  709. End Proc
  710.  
  711. Procedure TEN
  712.    TENFRAME=67
  713.    TX=BX
  714.    TY=BY-16
  715.    TENCOUNT=0
  716. End Proc